package com.hy;

import java.util.Arrays;
import java.util.Stack;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:下一个更大元素 II
 *
 * 给定一个循环数组 nums （ nums[nums.length - 1] 的下一个元素是 nums[0] ），返回 nums 中每个元素的 下一个更大元素 。
 * 数字 x 的 下一个更大的元素 是按数组遍历顺序，这个数字之后的第一个比它更大的数，这意味着你应该循环地搜索它的下一个更大的数。
 * 如果不存在，则输出 -1 。
 *
 * author: Mr.Du
 * Date: 2023/12/19
 * Time: 9:16
 */
public class NextGreaterElements {

    public int[] nextGreaterElements(int[] nums) {
        int m = nums.length,min = nums[m-1];
        int[] res = new int[m];
        Arrays.fill(res, -1);

        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < 2 * m - 1; i++) {
            int k = i % m;
            while (!stack.isEmpty() && nums[k] > nums[stack.peek()]) {
                int x = stack.pop();
                if (res[x] == -1) res[x] = nums[k];
            }
            stack.push(k);
        }
        return res;
    }
}
